package com.gitee.simons.common.utils;

import lombok.extern.slf4j.Slf4j;

import javax.mail.Address;
import javax.mail.Message;
import javax.mail.Session;
import javax.mail.Transport;
import javax.mail.internet.InternetAddress;
import javax.mail.internet.MimeMessage;
import java.util.ArrayList;
import java.util.Date;
import java.util.List;
import java.util.Properties;

/**
 * @Author: wangyq
 * @Date: 2019/4/10 10:02
 * @Description:
 */
@Slf4j
public class SendMailUtil {

    /**
     * 邮件发送的方法
     *
     * @param tos      收件人列表
     * @param subject  主题
     * @param content  内容
     * @param protocol 协议
     * @param host     发送服务器服务器
     * @param port     邮件发送人端口
     * @param userName 邮件发送人用户名
     * @param userPwd  邮件发送人密码
     * @return 成功或失败
     */
    public static boolean send(String[] tos, String subject, String content, String protocol,
                               String host, String port, String userName, String userPwd) {

        // 创建Session
        Properties props = new Properties();
        // 指定邮件的传输协议
        props.put("mail.transport.protocol", protocol);
        // 指定邮件发送服务器
        props.put("mail.host", host);
        // 指定邮件的发送人邮箱
        props.put("mail.from", userName);
        // 指定邮件的发送人邮箱端口
        props.put("mail.smtp.socketFactory.port", port);
        // 开启安全设置
        props.put("mail.smtp.starttls.enable", "true");
        props.put("mail.smtp.socketFactory.fallback", "false");

        Session session = Session.getDefaultInstance(props);

        // 开启调试模式
        //session.setDebug(true);
        try {

            // 连接邮件服务器，链接您的邮箱，用户名、密码
            Transport transport = session.getTransport();
            transport.connect(userName, userPwd);

            // 创建邮件消息体
            MimeMessage message = new MimeMessage(session);

            // 设置发信人
            message.setFrom(new InternetAddress(userName));

            // 邮件的主题
            message.setSubject(subject);

            // 收件人
            List<Address> addresses = new ArrayList<Address>();

            // 获取邮件发送对象
            for(String to: tos) {
                Address toAddress = new InternetAddress(to);
                addresses.add(toAddress);
                message.addRecipient(Message.RecipientType.TO, toAddress);
            }

            // 邮件的内容
            message.setContent(content, "text/html;charset=utf-8");

            // 邮件发送时间
            message.setSentDate(new Date());

            // 发送邮件
            // 第一个参数：邮件的消息体
            // 第二个参数：邮件的接收人，多个接收人用逗号隔开（test1@163.com,test2@sina.com）
            transport.sendMessage(message,addresses.toArray(new Address[addresses.size()]));
            return true;
        } catch (Exception e) {
            log.error("", e);
            e.printStackTrace();
        }
        return false;
    }

    public static void main(String[] args) {
        String[] addrs = new String[]{
                "jiangsm@sunmnet.com"
        };
        SendMailUtil.send( addrs, "智慧教室", "test", "smtp",
                "smtp.exmail.qq.com", "465", "tanggh@sunmnet.com", "AiPMdaDwmsqWBkV7");
    }

}
